library(ggplot2)
library(plotly)
head(mpg, 10)
count(mpg, manufacturer)
# Stacked Bar Chart
p1 <- ggplot(mpg, aes(x = class, fill = drv)) + geom_bar(position = "stack")
ggplotly(p1)
# Grouped Bar Chart
p2 <- ggplot(mpg, aes(x = class, fill = drv)) + geom_bar(position = position_dodge(preserve = "single"))
ggplotly(p2)
# Segmented Bar Chart
library(dplyr)
library(scales)
plotdata <- mpg %>% group_by(class, drv) %>% summarize(n = n()) %>% mutate(pct = n/sum(n), lbl = scales::percent(pct))
`summarise()` has grouped output by 'class'. You can override using the `.groups` argument.
plotdata
p3 <- ggplot(plotdata, aes(x = factor(class, levels = c("2seater", "subcompact", "compact", "midsize", "minivan", "suv", "pickup")), y = pct, fill = factor(drv, levels = c("f", "r", "4"), labels = c("front-wheel", "rear-wheel", "4-wheel"))))
p3 <- p3 + geom_bar(stat = "identity", position = "fill") + scale_y_continuous(breaks = seq(0, 1, .2), label = percent) + geom_text(aes(label = lbl), size = 3, position = position_stack(vjust = 0.5)) + scale_fill_brewer(palette = "Set2") + labs(y = "Percent", fill = "Drive Train", x = "Class", title = "Automobile Drive by Class") + theme_minimal()
p3

# Ridgeline Graph
library(ggridges)
p4 <- ggplot(mpg, aes(x = cty, y = class, fill = class)) + geom_density_ridges() + theme_ridges() + labs(title = "City mileage by auto class")
p4
Picking joint bandwidth of 0.929

# Scatter Plot
mean_hwy = mean(mpg$hwy)
mean_displ = mean(mpg$displ)
max_hwy = max(mpg$hwy)
min_displ = min(mpg$displ)
p5 <- ggplot(mpg, aes(x = displ, y = hwy, color = class, shape = factor(year))) + geom_point(size = 3, alpha = .75) + labs(title = "Displacement by Highway Mileage", x = "Engine Displacement (litres)", y = "Highway Miles per gallon") + theme_minimal()
p5 <- p5 + geom_hline(yintercept = mean_hwy, color = "darkred", linetype = "dashed") + ggplot2::annotate("text", min_displ, mean_hwy - 1, label = "Mean", color = "darkred") + geom_vline(xintercept = mean_displ, color = "darkred", linetype = "dashed") + ggplot2::annotate("text", mean_displ - .25, max_hwy, label = "Mean", color = "darkred")
ggplotly(p5)
LS0tDQp0aXRsZTogIm1wZyBEYXRhc2V0IHdpdGggaW50ZXJhY3Rpdml0eSINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQpgYGB7cn0NCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkocGxvdGx5KQ0KaGVhZChtcGcsIDEwKQ0KY291bnQobXBnLCBtYW51ZmFjdHVyZXIpDQojIFN0YWNrZWQgQmFyIENoYXJ0DQpwMSA8LSBnZ3Bsb3QobXBnLCBhZXMoeCA9IGNsYXNzLCBmaWxsID0gZHJ2KSkgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJzdGFjayIpDQpnZ3Bsb3RseShwMSkNCmBgYA0KYGBge3J9DQojIEdyb3VwZWQgQmFyIENoYXJ0DQpwMiA8LSBnZ3Bsb3QobXBnLCBhZXMoeCA9IGNsYXNzLCBmaWxsID0gZHJ2KSkgKyBnZW9tX2Jhcihwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHByZXNlcnZlID0gInNpbmdsZSIpKQ0KZ2dwbG90bHkocDIpDQpgYGANCmBgYHtyfQ0KIyBTZWdtZW50ZWQgQmFyIENoYXJ0DQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShzY2FsZXMpDQpwbG90ZGF0YSA8LSBtcGcgJT4lIGdyb3VwX2J5KGNsYXNzLCBkcnYpICU+JSBzdW1tYXJpemUobiA9IG4oKSkgJT4lIG11dGF0ZShwY3QgPSBuL3N1bShuKSwgbGJsID0gc2NhbGVzOjpwZXJjZW50KHBjdCkpDQpwbG90ZGF0YQ0KcDMgPC0gZ2dwbG90KHBsb3RkYXRhLCBhZXMoeCA9IGZhY3RvcihjbGFzcywgbGV2ZWxzID0gYygiMnNlYXRlciIsICJzdWJjb21wYWN0IiwgImNvbXBhY3QiLCAibWlkc2l6ZSIsICJtaW5pdmFuIiwgInN1diIsICJwaWNrdXAiKSksIHkgPSBwY3QsIGZpbGwgPSBmYWN0b3IoZHJ2LCBsZXZlbHMgPSBjKCJmIiwgInIiLCAiNCIpLCBsYWJlbHMgPSBjKCJmcm9udC13aGVlbCIsICJyZWFyLXdoZWVsIiwgIjQtd2hlZWwiKSkpKSANCnAzIDwtIHAzICsgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIHBvc2l0aW9uID0gImZpbGwiKSArIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMSwgLjIpLCBsYWJlbCA9IHBlcmNlbnQpICsgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGxibCksIHNpemUgPSAzLCBwb3NpdGlvbiA9IHBvc2l0aW9uX3N0YWNrKHZqdXN0ID0gMC41KSkgKyBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIlNldDIiKSArIGxhYnMoeSA9ICJQZXJjZW50IiwgZmlsbCA9ICJEcml2ZSBUcmFpbiIsIHggPSAiQ2xhc3MiLCB0aXRsZSA9ICJBdXRvbW9iaWxlIERyaXZlIGJ5IENsYXNzIikgKyB0aGVtZV9taW5pbWFsKCkNCnAzDQpgYGANCmBgYHtyfQ0KIyBSaWRnZWxpbmUgR3JhcGgNCmxpYnJhcnkoZ2dyaWRnZXMpDQpwNCA8LSBnZ3Bsb3QobXBnLCBhZXMoeCA9IGN0eSwgeSA9IGNsYXNzLCBmaWxsID0gY2xhc3MpKSArIGdlb21fZGVuc2l0eV9yaWRnZXMoKSArIHRoZW1lX3JpZGdlcygpICsgbGFicyh0aXRsZSA9ICJDaXR5IG1pbGVhZ2UgYnkgYXV0byBjbGFzcyIpDQpwNA0KYGBgDQpgYGB7cn0NCiMgU2NhdHRlciBQbG90DQptZWFuX2h3eSA9IG1lYW4obXBnJGh3eSkNCm1lYW5fZGlzcGwgPSBtZWFuKG1wZyRkaXNwbCkNCm1heF9od3kgPSBtYXgobXBnJGh3eSkNCm1pbl9kaXNwbCA9IG1pbihtcGckZGlzcGwpDQpwNSA8LSBnZ3Bsb3QobXBnLCBhZXMoeCA9IGRpc3BsLCB5ID0gaHd5LCBjb2xvciA9IGNsYXNzLCBzaGFwZSA9IGZhY3Rvcih5ZWFyKSkpICsgZ2VvbV9wb2ludChzaXplID0gMywgYWxwaGEgPSAuNzUpICsgbGFicyh0aXRsZSA9ICJEaXNwbGFjZW1lbnQgYnkgSGlnaHdheSBNaWxlYWdlIiwgeCA9ICJFbmdpbmUgRGlzcGxhY2VtZW50IChsaXRyZXMpIiwgeSA9ICJIaWdod2F5IE1pbGVzIHBlciBnYWxsb24iKSArIHRoZW1lX21pbmltYWwoKQ0KcDUgPC0gcDUgKyBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSBtZWFuX2h3eSwgY29sb3IgPSAiZGFya3JlZCIsIGxpbmV0eXBlID0gImRhc2hlZCIpICsgZ2dwbG90Mjo6YW5ub3RhdGUoInRleHQiLCBtaW5fZGlzcGwsIG1lYW5faHd5IC0gMSwgbGFiZWwgPSAiTWVhbiIsIGNvbG9yID0gImRhcmtyZWQiKSArIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IG1lYW5fZGlzcGwsIGNvbG9yID0gImRhcmtyZWQiLCBsaW5ldHlwZSA9ICJkYXNoZWQiKSArIGdncGxvdDI6OmFubm90YXRlKCJ0ZXh0IiwgbWVhbl9kaXNwbCAtIC4yNSwgbWF4X2h3eSwgbGFiZWwgPSAiTWVhbiIsIGNvbG9yID0gImRhcmtyZWQiKQ0KZ2dwbG90bHkocDUpDQpgYGA=